package com.dragon.common.utils;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.MDC;

import java.util.Map;
import java.util.UUID;

/**
 * MDC工具类
 *
 * @author dragon
 * @version 1.0
 * @date 2024/7/15 16:50
 */
public class MdcUtils {

    /**
     * 生成随机ID
     * @return 随机ID
     */
    public static String generate() {
        return UUID.randomUUID().toString();
    }

    /**
     * 生成随机ID（安全）
     * @return 随机ID
     */
    public static String safeGenerate(String name) {
        if (StringUtils.isBlank(name)) {
            return generate();
        }

        String uuid = get(name);
        if (StringUtils.isBlank(uuid)) {
            return generate();
        }

        return uuid;
    }

    /**
     * 获取MDC的值
     * @param name 键名
     * @return 值
     */
    public static String get(String name) {
        return MDC.get(name);
    }

    /**
     * 设置MDC的值
     * @param name 键名
     * @param value 值
     */
    public static void put(String name, String value) {
        MDC.put(name, value);
    }

    /**
     * 获取整个线程上下文中存入的Map值
     * @return Map值
     */
    public static Map<String, String> getCopyOfContextMap() {
        return MDC.getCopyOfContextMap();
    }

    /**
     * 设置线程的上下文的Map值
     * @param contextMap Map值
     */
    public static void setContextMap(Map<String, String> contextMap) {
        MDC.setContextMap(contextMap);
    }

    /**
     * 移除MDC的值
     * @param name 键名
     */
    public static void remove(String name) {
        MDC.remove(name);
    }

    /**
     * 移除MDC所有的值
     */
    public static void clear() {
        MDC.clear();
    }

}
